package mlz.c_recursion;

import java.io.File;
import java.io.IOException;

/*
案例需求：在`D:\\`判断下搜索QQ.exe这个文件，然后直接输出。

需求分析:
1.先调用File类中的listFile方法,获取到文件夹中的一级内容,得到一个数组
2.再进行遍历数组,获取到数组中的File对象
3.因为File对象有可能是文件也有可能是文件夹,所以要对File文件对象进行判断
    a.判断File对象如果是文件,就获取文件名字,如果是`QQ.exe`那直接打印,否则不打印
    b.判断ile对象如果是文件夹,就执行递归重复1,2,3步骤
 */
public class Demo03 {
    public static void main(String[] args) throws IOException {
        selectFile(new File("D:\\"),"QQ.exe");
    }

    //寻找文件的方法

    /**
     *
     * @param dir 目录
     * @param fileName 要搜寻的文件名称
     */
    public static void selectFile(File dir,String fileName) throws IOException {
        //1.把非法的情况做一个拦截
//        if (dir == null || dir.exists() || dir.isFile()){
//            return; //表示无法搜寻,直接结束方法
//        }
        //2.dir不是null,也就是一定会存在目录对象
        //获取当前目录下的全部的一级文件对象
        File[] files = dir.listFiles();

        //3.判断当前目录下是否有下一级文件对象,以及是否可以拿到一级文件对象
        if (files != null && files.length > 0){
            //4.遍历全部一级文件对象
            for(File f :  files){
                //5.判断文件对象是否是文件还是文件夹
                if (f.isFile()){
                    //是文件,判断这个文件名是不是我们要的 QQ.exe
                    if (f.getName().contains(fileName)){
                        System.out.println("找到了" + f.getAbsolutePath());
                        //要运行程序
                        Runtime runtime = Runtime.getRuntime();
                        runtime.exec(f.getAbsolutePath());
                    }
                }else {
                    //是文件夹.就继续重复之前寻找的过程(递归的过程)
                    selectFile(f,fileName);
                }
            }
        }
    }

}















